"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var PictureEditWebSocket = /** @class */ (function () {
    function PictureEditWebSocket(pictureId) {
        this.pictureId = pictureId; // 当前编辑的图片 ID
        this.socket = null; // WebSocket 实例
        this.eventHandlers = {}; // 自定义事件处理器
    }
    /**
     * 初始化 WebSocket 连接
     */
    PictureEditWebSocket.prototype.connect = function () {
        var _this = this;
        var url = "ws://localhost:8123/api/ws/picture/edit?pictureId=".concat(this.pictureId);
        this.socket = new WebSocket(url);
        // 设置携带 cookie
        this.socket.binaryType = 'blob';
        // 监听连接成功事件
        this.socket.onopen = function () {
            console.log('WebSocket 连接已建立');
            _this.triggerEvent('open');
        };
        // 监听消息事件
        this.socket.onmessage = function (event) {
            var message = JSON.parse(event.data);
            console.log('收到消息:', message);
            // 根据消息类型触发对应事件
            var type = message.type;
            _this.triggerEvent(type, message);
        };
        // 监听连接关闭事件
        this.socket.onclose = function (event) {
            console.log('WebSocket 连接已关闭:', event);
            _this.triggerEvent('close', event);
        };
        // 监听错误事件
        this.socket.onerror = function (error) {
            console.error('WebSocket 发生错误:', error);
            _this.triggerEvent('error', error);
        };
    };
    /**
     * 关闭 WebSocket 连接
     */
    PictureEditWebSocket.prototype.disconnect = function () {
        if (this.socket) {
            this.socket.close();
            console.log('WebSocket 连接已手动关闭');
        }
    };
    /**
     * 发送消息到后端
     * @param {Object} message 消息对象
     */
    PictureEditWebSocket.prototype.sendMessage = function (message) {
        if (this.socket && this.socket.readyState === WebSocket.OPEN) {
            this.socket.send(JSON.stringify(message));
            console.log('消息已发送:', message);
        }
        else {
            console.error('WebSocket 未连接，无法发送消息:', message);
        }
    };
    /**
     * 添加自定义事件监听,监听后端发来的消息
     * @param {string} type 消息类型
     * @param {Function} handler 消息处理函数
     */
    PictureEditWebSocket.prototype.on = function (type, handler) {
        if (!this.eventHandlers[type]) {
            this.eventHandlers[type] = [];
        }
        this.eventHandlers[type].push(handler);
    };
    /**
     * 触发事件
     * @param {string} type 消息类型
     * @param {Object} data 消息数据
     */
    PictureEditWebSocket.prototype.triggerEvent = function (type, data) {
        var handlers = this.eventHandlers[type];
        if (handlers) {
            handlers.forEach(function (handler) { return handler(data); });
        }
    };
    return PictureEditWebSocket;
}());
exports.default = PictureEditWebSocket;
